package interfaz;

import java.sql.SQLException;
import java.util.Vector;

import javax.swing.JInternalFrame;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;

import modelo.CentroEstudios;
import modelo.Solicitud;

import javax.swing.JTable;
import javax.swing.JButton;
import javax.swing.table.DefaultTableModel;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JCheckBox;
import javax.swing.event.ChangeListener;
import javax.swing.event.ChangeEvent;

public class VAtendSol extends JInternalFrame {

	private CentroEstudios centroEstudios;
	private JTable table;
	private JCheckBox chckbxMostrarSinAtender;
	private DefaultTableModel modelo;
	
	public VAtendSol(CentroEstudios centroEstudios) {
		this.centroEstudios = centroEstudios;
		setBounds(100, 100, 488, 450);
		setTitle("Administrar solicitudes");
		setClosable(true);
		getContentPane().setLayout(null);
				
		JScrollPane scrollPane = new JScrollPane();
		scrollPane.setBounds(12, 41, 454, 248);
		getContentPane().add(scrollPane);
		
		table = new JTable(){
			public boolean isCellEditable(int rowIndex, int colIndex){
				return false;
			}
		};
		scrollPane.setViewportView(table);
				
		JButton btnAtender = new JButton("Atender");
		btnAtender.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent e) {
				boolean exito;
				Solicitud sol;
				if(table.getSelectedRow() == -1){
					JOptionPane.showMessageDialog(VAtendSol.this, "Selecciona primero la solicitud a atender.","Gestionar solicitudes",JOptionPane.WARNING_MESSAGE);
				}else{
					sol = VAtendSol.this.centroEstudios.vSolicitudes.elementAt(table.getSelectedRow());
					int respuesta = JOptionPane.showConfirmDialog(VAtendSol.this, "¿Se ha podido cumplir la solicitud?");
					if (respuesta == JOptionPane.YES_OPTION){
						exito = true;
					}else if(respuesta == JOptionPane.NO_OPTION){
						exito = false;
					}else{
						return;
					}
					sol.setResuelto(exito);
					try {
						VAtendSol.this.centroEstudios.realizarSolicitud(sol);
						JOptionPane.showMessageDialog(VAtendSol.this, "Solicitud atendida correctamente.", "Gestión de solicitudes", JOptionPane.INFORMATION_MESSAGE);
						anadirDatosTabla(VAtendSol.this.centroEstudios.vSolicitudes);
					} catch (SQLException e1) {
						e1.printStackTrace();
						JOptionPane.showMessageDialog(VAtendSol.this, "No se ha podido realizar la solicitud.", "Gestión de solicitudes", JOptionPane.ERROR_MESSAGE);
					}
				}
			}
		});
		btnAtender.setBounds(183, 316, 117, 25);
		getContentPane().add(btnAtender);
		
		chckbxMostrarSinAtender = new JCheckBox("Mostrar sin atender");
		chckbxMostrarSinAtender.addChangeListener(new ChangeListener() {
			public void stateChanged(ChangeEvent arg0) {
				if(chckbxMostrarSinAtender.isSelected()){
					anadirDatosTabla(soloNORes());
				}else{
					anadirDatosTabla(VAtendSol.this.centroEstudios.vSolicitudes);
				}
			}
		});
		chckbxMostrarSinAtender.setBounds(299, 8, 167, 23);
		getContentPane().add(chckbxMostrarSinAtender);

	}
	
	/**
	 * Carga los datos de las solicitudes en la tabla
	 * @param todas Si true, carga todas. Si false, carga sólo las no resueltas
	 */
	public void anadirDatosTabla(Vector<Solicitud> vSol){
		modelo = new DefaultTableModel();
		modelo.addColumn("ID Sol");
		modelo.addColumn("ID Soft");
		modelo.addColumn("ID Aula");
		modelo.addColumn("ID Usuario");
		modelo.addColumn("ID Equipo");
		modelo.addColumn("Resuelto");
		
		for (int i=0;i<vSol.size();i++){
			Object[] linea = new Object[6];
			linea[0] = vSol.elementAt(i).getIdSolicitud();
			linea[1] = vSol.elementAt(i).getSoftware().getIdSoftware();
			if (vSol.elementAt(i).aula.getIdAula().equals("-1")){
				linea[2] = "ND";
			}else{
				linea[2] = vSol.elementAt(i).aula.getIdAula();
			}
			linea[3] = vSol.elementAt(i).usuario.getIdUsuario();
			if (vSol.elementAt(i).equipo.getIdEquipo().equals("-1")){
				linea[4] = "ND";
			}else{
				linea[4] = vSol.elementAt(i).equipo.getIdEquipo();
			}
			if (vSol.elementAt(i).isResuelto()){
				linea[5] = "SI";
			}else{
				linea[5] = "NO";
			}
			modelo.addRow(linea);
		}
		table.setModel(modelo);
	}
	
	public Vector<Solicitud> soloNORes(){
		Vector<Solicitud> vSolNo = new Vector<Solicitud>();
		for (int i=0;i<centroEstudios.vSolicitudes.size();i++){
			if(!centroEstudios.vSolicitudes.elementAt(i).isResuelto()){
				vSolNo.addElement(centroEstudios.vSolicitudes.elementAt(i));
			}
		}
		return vSolNo;
	}
	
	public void setVisible(boolean b){
		super.setVisible(b);
		if (b) anadirDatosTabla(centroEstudios.vSolicitudes);
	}
}
